home *** CD-ROM | disk | FTP | other *** search
/ PC World Interactive 7 / PC World Interactive 7.iso / program / pastutor.EXE / tutor08c.pas < prev    next >
Pascal/Delphi Source File  |  1998-04-02  |  8KB  |  329 lines

  1. {************************************************}
  2. {                                                }
  3. {   Turbo Vision 2.0 Demo                        }
  4. {   Copyright (c) 1992 by Borland International  }
  5. {                                                }
  6. {************************************************}
  7.  
  8. program Tutor08c;
  9.  
  10. uses Memory, TutConst, Drivers, Objects, Views, Menus, App, Dialogs,
  11.   Editors, StdDlg;
  12.  
  13. type
  14.   POrderWindow = ^TOrderWindow;
  15.   TOrderWindow = object(TDialog)
  16.     constructor Init;
  17.     procedure HandleEvent(var Event: TEvent); virtual;
  18.   end;
  19.  
  20.   TTutorApp = object(TApplication)
  21.     ClipboardWindow: PEditWindow;
  22.     OrderWindow: POrderWindow;
  23.     constructor Init;
  24.     destructor Done; virtual;
  25.     procedure DoAboutBox;
  26.     procedure HandleEvent(var Event: TEvent); virtual;
  27.     procedure InitMenuBar; virtual;
  28.     procedure InitStatusLine; virtual;
  29.     procedure LoadDesktop;
  30.     procedure NewWindow;
  31.     procedure OpenOrderWindow;
  32.     procedure OpenWindow;
  33.     procedure SaveDesktop;
  34.   end;
  35.  
  36. var
  37.   ResFile: TResourceFile;
  38.  
  39. const
  40.   ROrderWindow: TStreamRec = (
  41.      ObjType: 15001;
  42.      VmtLink: Ofs(TypeOf(TOrderWindow)^);
  43.      Load:    @TOrderWindow.Load;
  44.      Store:   @TOrderWindow.Store
  45.   );
  46.  
  47. procedure TutorStreamError(var S: TStream); far;
  48. var
  49.   ErrorMessage: String;
  50. begin
  51.   case S.Status of
  52.     stError: ErrorMessage := 'Stream access error';
  53.     stInitError: ErrorMessage := 'Cannot initialize stream';
  54.     stReadError: ErrorMessage := 'Read beyond end of stream';
  55.     stWriteError: ErrorMessage := 'Cannot expand stream';
  56.     stGetError: ErrorMessage := 'Unregistered type read from stream';
  57.     stPutError: ErrorMessage := 'Unregistered type written to stream';
  58.     end;
  59.   DoneVideo;
  60.   PrintStr('Error: ' + ErrorMessage);
  61.   Halt(Abs(S.Status));
  62. end;
  63.  
  64. constructor TOrderWindow.Init;
  65. var
  66.   R: TRect;
  67.   Field: PInputLine;
  68.   Cluster: PCluster;
  69.   Memo: PMemo;
  70. begin
  71.   R.Assign(0, 0, 60, 17);
  72.   inherited Init(R, 'Orders');
  73.   Options := Options or ofCentered;
  74.   HelpCtx := $F000;
  75.  
  76.   R.Assign(13, 2, 23, 3);
  77.   Field := New(PInputLine, Init(R, 8));
  78.   Insert(Field);
  79.   R.Assign(2, 2, 12, 3);
  80.   Insert(New(PLabel, Init(R, '~O~rder #:', Field)));
  81.  
  82.   R.Assign(43, 2, 53, 3);
  83.   Field := New(PInputLine, Init(R, 8));
  84.   Insert(Field);
  85.   R.Assign(26, 2, 41, 3);
  86.   Insert(New(PLabel, Init(R, '~D~ate of order:', Field)));
  87.  
  88.   R.Assign(13, 4, 23, 5);
  89.   Field := New(PInputLine, Init(R, 8));
  90.   Insert(Field);
  91.   R.Assign(2, 4, 12, 5);
  92.   Insert(New(PLabel, Init(R, '~S~tock #:', Field)));
  93.  
  94.   R.Assign(46, 4, 53, 5);
  95.   Field := New(PInputLine, Init(R, 5));
  96.   Insert(Field);
  97.   R.Assign(26, 4, 44, 5);
  98.   Insert(New(PLabel, Init(R, '~Q~uantity ordered:', Field)));
  99.  
  100.   R.Assign(3, 7, 57, 8);
  101.   Cluster := New(PRadioButtons, Init(R,
  102.     NewSItem('Cash   ',
  103.     NewSItem('Check  ',
  104.     NewSItem('P.O.   ',
  105.     NewSItem('Account', nil))))));
  106.   Insert(Cluster);
  107.   R.Assign(2, 6, 21, 7);
  108.   Insert(New(PLabel, Init(R, '~P~ayment method:', Cluster)));
  109.  
  110.   R.Assign(22, 8, 37, 9);
  111.   Cluster := New(PCheckBoxes, Init(R, NewSItem('~R~eceived', nil)));
  112.   Insert(Cluster);
  113.  
  114.   R.Assign(3, 10, 57, 13);
  115.   Memo := New(PMemo, Init(R, nil, nil, nil, 255));
  116.   Insert(Memo);
  117.   R.Assign(2, 9, 9, 10);
  118.   Insert(New(PLabel, Init(R, 'Notes:', Memo)));
  119.  
  120.   R.Assign(2, 14, 12, 16);
  121.   Insert(New(PButton, Init(R, '~N~ew', cmOrderNew, bfNormal)));
  122.   R.Assign(13, 14, 23, 16);
  123.   Insert(New(PButton, Init(R, '~S~ave', cmOrderSave, bfDefault)));
  124.   R.Assign(24, 14, 34, 16);
  125.   Insert(New(PButton, Init(R, 'Re~v~ert', cmOrderCancel, bfNormal)));
  126.   R.Assign(35, 14, 45, 16);
  127.   Insert(New(PButton, Init(R, 'Next', cmOrderNext, bfNormal)));
  128.   R.Assign(46, 14, 56, 16);
  129.   Insert(New(PButton, Init(R, 'Prev', cmOrderPrev, bfNormal)));
  130.   SelectNext(False);
  131. end;
  132.  
  133. procedure TOrderWindow.HandleEvent(var Event: TEvent);
  134. begin
  135.   inherited HandleEvent(Event);
  136.   if (Event.What = evBroadcast) and
  137.     (Event.Command = cmFindOrderWindow) then
  138.     ClearEvent(Event);
  139. end;
  140.  
  141. constructor TTutorApp.Init;
  142. var
  143.   R: TRect;
  144. begin
  145.   MaxHeapSize := 8192;
  146.   EditorDialog := StdEditorDialog;
  147.   StreamError := @TutorStreamError;
  148.   RegisterMenus;
  149.   RegisterObjects;
  150.   RegisterViews;
  151.   RegisterApp;
  152.   RegisterEditors;
  153.   RegisterDialogs;
  154.   RegisterType(ROrderWindow);
  155.   ResFile.Init(New(PBufStream, Init('TUTORIAL.TVR', stOpenRead, 1024)));
  156.   inherited Init;
  157.   DisableCommands([cmStockWin, cmSupplierWin]);
  158.   Desktop^.GetExtent(R);
  159.   ClipboardWindow := New(PEditWindow, Init(R, '', wnNoNumber));
  160.   if ValidView(ClipboardWindow) <> nil then
  161.   begin
  162.     ClipboardWindow^.Hide;
  163.     InsertWindow(ClipboardWindow);
  164.     Clipboard := ClipboardWindow^.Editor;
  165.     Clipboard^.CanUndo := False;
  166.   end;
  167. end;
  168.  
  169. destructor TTutorApp.Done;
  170. begin
  171.   ResFile.Done;
  172.   inherited Done;
  173. end;
  174.  
  175. procedure TTutorApp.DoAboutBox;
  176. begin
  177.   ExecuteDialog(PDialog(ResFile.Get('ABOUTBOX')), nil);
  178. end;
  179.  
  180. procedure TTutorApp.HandleEvent(var Event: TEvent);
  181. var
  182.   R: TRect;
  183. begin
  184.   inherited HandleEvent(Event);
  185.   if Event.What = evCommand then
  186.   begin
  187.     case Event.Command of
  188.       cmOrderWin:
  189.         begin
  190.           OpenOrderWindow;
  191.           ClearEvent(Event);
  192.         end;
  193.       cmOptionsLoad:
  194.         begin
  195.           LoadDesktop;
  196.           ClearEvent(Event);
  197.         end;
  198.       cmOptionsSave:
  199.         begin
  200.           SaveDesktop;
  201.           ClearEvent(Event);
  202.         end;
  203.       cmClipShow:
  204.         with ClipboardWindow^ do
  205.         begin
  206.           Select;
  207.           Show;
  208.           ClearEvent(Event);
  209.         end;
  210.       cmNew:
  211.         begin
  212.           NewWindow;
  213.           ClearEvent(Event);
  214.         end;
  215.       cmOpen:
  216.         begin
  217.           OpenWindow;
  218.           ClearEvent(Event);
  219.         end;
  220.       cmOptionsVideo:
  221.         begin
  222.           SetScreenMode(ScreenMode xor smFont8x8);
  223.           ClearEvent(Event);
  224.         end;
  225.       cmAbout:
  226.         begin
  227.           DoAboutBox;
  228.           ClearEvent(Event);
  229.         end;
  230.     end;
  231.   end;
  232. end;
  233.  
  234. procedure TTutorApp.InitMenuBar;
  235. begin
  236.   MenuBar := PMenuBar(ResFile.Get('MAINMENU'));
  237. end;
  238.  
  239. procedure TTutorApp.InitStatusLine;
  240. var
  241.   R: TRect;
  242. begin
  243.   StatusLine := PStatusLine(ResFile.Get('STATUS'));
  244.   GetExtent(R);
  245.   StatusLine^.MoveTo(0, R.B.Y - 1);
  246. end;
  247.  
  248. procedure TTutorApp.LoadDesktop;
  249. var
  250.   DesktopFile: TBufStream;
  251.   TempDesktop: PDesktop;
  252.   R: TRect;
  253. begin
  254.   DesktopFile.Init('DESKTOP.TUT', stOpenRead, 1024);
  255.   TempDesktop := PDesktop(DesktopFile.Get);
  256.   DesktopFile.Done;
  257.   if ValidView(TempDesktop) <> nil then
  258.   begin
  259.     Desktop^.Delete(ClipboardWindow);
  260.     Delete(Desktop);
  261.     Dispose(Desktop, Done);
  262.     Desktop := TempDesktop;
  263.     Insert(Desktop);
  264.     GetExtent(R);
  265.     R.Grow(0, -1);
  266.     Desktop^.Locate(R);
  267.     InsertWindow(ClipboardWindow);
  268.   end;
  269. end;
  270.  
  271. procedure TTutorApp.NewWindow;
  272. var
  273.   R: TRect;
  274.   TheWindow: PEditWindow;
  275. begin
  276.   R.Assign(0, 0, 60, 20);
  277.   TheWindow := New(PEditWindow, Init(R, '', wnNoNumber));
  278.   InsertWindow(TheWindow);
  279. end;
  280.  
  281. procedure TTutorApp.OpenOrderWindow;
  282. begin
  283.   if Message(Desktop, evBroadcast, cmFindOrderWindow, nil) = nil then
  284.   begin
  285.     OrderWindow := New(POrderWindow, Init);
  286.     InsertWindow(OrderWindow);
  287.   end
  288.   else
  289.     if PView(OrderWindow) <> Desktop^.TopView then OrderWindow^.Select;
  290. end;
  291.  
  292. procedure TTutorApp.OpenWindow;
  293. var
  294.   R: TRect;
  295.   FileDialog: PFileDialog;
  296.   TheFile: FNameStr;
  297. const
  298.   FDOptions: Word = fdOKButton or fdOpenButton;
  299. begin
  300.   TheFile := '*.*';
  301.   New(FileDialog, Init(TheFile, 'Open file', '~F~ile name',
  302.     FDOptions, 1));
  303.   if ExecuteDialog(FileDialog, @TheFile) <> cmCancel then
  304.   begin
  305.     R.Assign(0, 0, 75, 20);
  306.     InsertWindow(New(PEditWindow, Init(R, TheFile, wnNoNumber)));
  307.   end;
  308. end;
  309.  
  310. procedure TTutorApp.SaveDesktop;
  311. var
  312.   DesktopFile: TBufStream;
  313. begin
  314.   Desktop^.Delete(ClipboardWindow);
  315.   DesktopFile.Init('DESKTOP.TUT', stCreate, 1024);
  316.   DesktopFile.Put(Desktop);
  317.   DesktopFile.Done;
  318.   InsertWindow(ClipboardWindow);
  319. end;
  320.  
  321. var
  322.   TutorApp: TTutorApp;
  323.  
  324. begin
  325.   TutorApp.Init;
  326.   TutorApp.Run;
  327.   TutorApp.Done;
  328. end.
  329.